package com.quan.oa.web.controller;
import java.util.List;
import java.util.Map;

import javax.validation.Valid;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSON;
import com.quan.common.base.bean.PageBean;
import com.quan.common.base.bean.ResultBean;
import com.quan.common.biz.support.BaseController;
import com.quan.common.utils.Pinyin4jHelper;
import com.quan.oa.entity.IeasySysUser;
import com.quan.oa.entity.OaPerson;
import com.quan.oa.feign.SystemUserServiceFeign;
import com.quan.oa.service.IeasySysUserService;
import com.quan.oa.service.OaPersonService;
import com.quan.system.entity.SystemUser;
import com.xiaoleilu.hutool.date.DateUtil;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 杨浩泉
 * @since 2019-02-20
 */
@RestController
@RequestMapping("/oa/sysuser")
public class IeasySysUserController extends BaseController {
	
	@Autowired 
	private IeasySysUserService service;
	
	@Autowired 
	private SystemUserServiceFeign userServiceFeign;

    @Autowired 
    private OaPersonService personService;

	/**
     * 添加
     * @param  entity 实体
     * @return ResultBean
     */
    @PostMapping("/add")
    public Object add(@Valid @RequestBody IeasySysUser entity) {
		IeasySysUser insertSelective = this.service.insertSelective(entity);
		if (null != insertSelective) {
			return ResultBean.ok();
		} else {
			return ResultBean.failure();
		}
    }

    /**
     * 删除
     * @param id ID
     * @return ResultBean
     */
    @DeleteMapping("/delete/{id}")
    public Object delete(@PathVariable Integer id) {
    	int count = this.service.deleteById(id);
    	if(count > 0) {
    		return ResultBean.ok();
    	} else {
    		return ResultBean.failure("通过ID删除失败：[ " + id + " ]");
    	}
    }
    
    /**
     * 批量删除
     * @param params idList(JSON):["1","2"]
     * @return ResultBean
     */
    @PostMapping("/delete")
    public Object delete(@RequestBody Map<String, Object> params) {
    	if(null != params && !params.isEmpty()) {
    		List<Integer> idList = JSON.parseArray(params.get("idList").toString(), Integer.class);
    		int count = this.service.deleteByIds(StringUtils.join(idList, ","));
        	if(count > 0) {
        		return ResultBean.ok();
        	} else {
        		return ResultBean.failure("通过ID删除失败：[ " + idList + " ]");
        	}
    	}
    	return ResultBean.failure("请选项需要删除的记录");
    }

    /**
     * 修改
     * @param  entity 实体
     * @return ResultBean
     */
    @PostMapping("/update")
    public Object update(@Valid @RequestBody IeasySysUser entity) {
    	int count = this.service.updateSelective(entity);
    	if(count > 0) {
    		return ResultBean.ok();
    	} else {
    		return ResultBean.failure();
    	}
    }

    /**
    * 通过ID查询
    *
    * @param id ID
    * @return IeasySysUser
    */
    @GetMapping("/get/{id}")
    public Object get(@PathVariable Integer id) {
    	IeasySysUser entity = this.service.selectOneById(id);
    	if(null != entity) {
    		return ResultBean.ok(entity);
    	} else {
    		return ResultBean.failure("通过ID查询失败：[ " + id + " ]");
    	}
    }
    
    /**
    * 多条件查询数据列表
    *
    * @param entiy 实体对象（查询条件）
    * @return 分页对象
    */
    @GetMapping(value = "/list")
    public Object list(IeasySysUser entity) {
		return ResultBean.ok(this.service.selectAll(entity));
    }

    /**
    * 多条件查询分页数据
    *
    * @param entiy 实体对象（查询条件）
    * @return 分页对象
    */
    @GetMapping(value = "/page")
    public Object page(IeasySysUser entity) {
		return ResultBean.ok(this.service.selectPage(entity, new PageBean(request)));
    }
    
    /**
     * 添加
     * @param  entity 实体
     * @return ResultBean
     */
    @GetMapping("/init")
    public Object init() {
    	
    	List<IeasySysUser> all = this.service.selectJoinPersonAll() ;
		for (IeasySysUser u : all) {
			System.out.print(u.getAccount()+"\t");
			System.out.print(u.getPassword()+"\t");
			System.out.print(u.getLastAcceccTime()+"\t");
			System.out.print(u.getPersons().getEmail()+"\t");
			System.out.print(u.getPersons().getSex()+"\t");
			System.out.print(u.getPersons().getName()+"\t");
			System.out.print(u.getPersons().getMobile()+"\t");
			System.out.print(u.getPersons().getEmpState()+"\t");
			
			System.out.println("");
			
			String email = null;
			if(null != u.getPersons().getEmail()) {
				if(u.getPersons().getEmail().equals("__none__@whizen.com")) {
					email = Pinyin4jHelper.getPinYin(u.getPersons().getName())+"@whizen.com";
				} else {
					email = u.getPersons().getEmail() ;
				}
			}
			
			
			
			OaPerson p = new OaPerson() ;
			p.setNum(u.getPersons().getNum().replaceAll("_", ""));
			p.setName(u.getPersons().getName());
			p.setSex(("男".equals(u.getPersons().getSex()) ? 1 : 2));
			p.setBirthDate(u.getPersons().getBirth());
			p.setMobile(u.getPersons().getMobile());
			p.setEmail(email);
			p.setAddress(u.getPersons().getAddress());
			p.setProfession(u.getPersons().getProfession());
			p.setUniversity(u.getPersons().getSchool());
			p.setGraduationDate(u.getPersons().getBysj());
			
			//员工状态（1：在职，2：离职，3：停薪留职，4：退休）
			if(u.getPersons().getEmpState().equals("在职")) {
				p.setEmpState(1);
				p.setStatus(true);
				p.setDelFlag("1");
			} else if(u.getPersons().getEmpState().equals("离职")) {
				p.setEmpState(2);
				p.setStatus(false);
				p.setDelFlag("2");
			} else if(u.getPersons().getEmpState().equals("停薪留职")) {
				p.setEmpState(3);
				p.setStatus(false);
				p.setDelFlag("2");
			} else if(u.getPersons().getEmpState().equals("退休")) {
				p.setEmpState(4);
				p.setStatus(false);
				p.setDelFlag("2");
			}
			
			//员工类型（1：正式工，2：合同工，3：临时工，4：试用期员工）
			if(u.getPersons().getEmpType().equals("正式工")) {
				p.setEmpType(1);
			} else if(u.getPersons().getEmpType().equals("合同工")) {
				p.setEmpType(2);
			} else if(u.getPersons().getEmpType().equals("临时工")) {
				p.setEmpType(3);
			} else if(u.getPersons().getEmpType().equals("试用期员工")) {
				p.setEmpType(4);
			}
			
			//职称等级（1：普通职员，2：高级职员，3：核心员工）
			if(u.getPersons().getEmpLevel().equals("普通职员")) {
				p.setEmpLevel(1);
			} else if(u.getPersons().getEmpLevel().equals("高级职员")) {
				p.setEmpLevel(2);
			} else if(u.getPersons().getEmpLevel().equals("核心员工")) {
				p.setEmpLevel(3);
			}
			
			p.setEntryDate(u.getPersons().getEnterDate());
			p.setBecomeDate(u.getPersons().getChangeDate());
			p.setDimissionDate(u.getPersons().getDimissionDate());
			p.setToDeptDate(u.getPersons().getDeptStartDate());
			p.setToPositionDate(u.getPersons().getPositionStartDate());
			
			
			OaPerson pp = this.personService.insertSelective(p) ;
			
			SystemUser user = new SystemUser() ;
			
			if(null != u.getAccount()) {
				
				user.setEmpId(pp.getId());
				
				user.setAccount(u.getAccount().replaceAll("@", ""));
				user.setRealName(u.getPersons().getName());
				user.setPassword("123456");
				user.setSex(("男".equals(u.getPersons().getSex()) ? 1 : 2));
				
				
				
				user.setEmail(email);
				user.setMobile(u.getPersons().getMobile());
				user.setStatus((null != u.getPersons().getLbmType() && u.getPersons().getLbmType().equals("离职") ? false : true));
				user.setDelFlag((null != u.getPersons().getLbmType() && u.getPersons().getLbmType().equals("离职") ? "2" : "1"));
				user.setLastLoginTime(null != u.getLastAcceccTime() ? DateUtil.parseDateTime(u.getLastAcceccTime()): null);
				
				this.userServiceFeign.add(user) ;
			}
		}
    	
		System.out.println(all.size());
    	
    	return ResultBean.ok();
    }

}
